/*******************************************************************************
/
/ mapa.h
/
/ Creado por Roberto García Carvajal.
/
/ Clase para el manejo de mapas. Usa un formato de fichero particular. 
/ Incluye un identificador calculado con md5 para diferenciar los mapas.
/
/ Documento bajo licencia GPL.
/
*******************************************************************************/

#ifndef _C_MAPA_
#define _C_MAPA_

#define C_MAPA_MAJOR_VERSION 1
#define C_MAPA_MINOR_VERSION 0
#define C_MAPA_PATCH_VERSION 0

class c_mapa
{
 public:
  // Constructor predeterminado.
  c_mapa();
  // Constructor desde fichero.
  c_mapa(char * fich);
  // Constructor de copia.
  c_mapa(const c_mapa&);
  
  // Para cargar mapas(igual que el constructor desde fichero).
  void cargar(char * fich);
  // Para salvar mapas.
  void salvar(char * fich);
  
  void alto(unsigned int a) { m_alto = a; }
  void ancho(unsigned int a) { m_ancho = a; }
  unsigned int alto() { return m_alto; }
  unsigned int ancho() { return m_ancho; }

  // Destructor de la zona de memoria dinamica.
  void destruir();
  // Regenerador de la zona de memoria dinamica.
  void regenerar();

  char * md5() { return md5sum; }
  void md5(char * MD5);

  char * nombrefichero() { return m_fich; }
  void nombrefichero(char * fich);
  
  void asociar(char * nom);
  
  char ** mapa() { return m_mapa; }
  
  unsigned int MV() { return m_MV; }
  unsigned int mV() { return m_mV; }
  unsigned int PV() { return m_PV; }
  
  void MV(unsigned int p_MV) { m_MV = p_MV; }
  void mV(unsigned int p_mV) { m_mV = p_mV; }
  void PV(unsigned int p_PV) { m_PV = p_PV; }
  
  // Modifica una casilla.
  void modificar(int x, int y, int n) { m_mapa[y][x] = n; }

  c_mapa &operator=(const c_mapa & m);
 private:
  char md5sum[33];
  char ** m_mapa;
  unsigned int m_ancho;
  unsigned int m_alto;
  char m_fich[101];
  unsigned int m_MV,m_mV,m_PV;
};

#endif

